package com.sp.system.user.oauth;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;

@Configuration
public class TokenConfig {

    @Autowired
    private RedisConnectionFactory connectionFactory;
    /**
     * TokenStore的实现类，有InMemoryTokenStore、JdbcTokenStore、JwkTokenStore、RedisTokenStore。
     * <p>
     * InMemoryTokenStore将OAuth2AccessToken保存在内存中，它有很多的ConcurrentHashMap属性。
     * <p>
     * JdbcTokenStore将OAuth2AccessToken保存在数据库中，其构造方法需要DataSource，用于构造JdbcTemplate，通过JdbcTemplate来操作数据库。
     * <p>
     * 　RedisTokenStore将OAuth2AccessToken保存到Reis中，构造方法需要RedisConnectionFactory，之后通过Connection操作Redis。
     * <p>
     * JwtTokenStore
     *
     * @return
     */

    @Bean
    public RedisTokenStore tokenStore() {
        RedisTokenStore redisTokenStore=new RedisTokenStore(connectionFactory);
        //解决默认实现中，同一username，accesstoken一致问题
//        redisTokenStore.setAuthenticationKeyGenerator();
        return redisTokenStore;
    }

}
